// 1.object表示一个js对象
let a: object;

// js很多东西都是对象, 如下
a = {};
a = function () { };
a = [];


// 2.很多情况下我们不是想限制它是否是一个对象, 而是想限制它的有什么属性, 那我们又该怎么写呢?
let b: {
  name: string,
  // 属性后面添加? 表示属性为可选的 写也可以 不写也可以
  age?: number
};

// b = {}; // ERROR: 类型 "{}" 中缺少属性 "name"，但类型 "{ name: string; }" 中需要该属性
b = { name: "小陈" };


// 3.我们现在想写一个对象内必须包含name属性, 其它属性可写可不写, 怎么编写呢?
let c: {
  name: string,
  // 利用 [属性名: string]: any 完成
  [propName: string]: any
}

c = { name: "小陈", age: 18, gender: "male" }


// 4.还有一种写法 &连接符 表示两种情况都要满足
let d: { name: string } & { age: number };
d = { name: "小陈", age: 18 };